// src/utils/password-util.js
// 引入 MD5 加密库（需先安装：npm install js-md5）
import md5 from 'js-md5';

// 1. 与后端 PasswordUtil 完全一致的常量
const arr = ['a', 'b', 'c', 'd', 'e', 'f', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
const salt_index = 5; // 与后端 salt_index 一致
const count_index = 15; // 与后端 count_index 一致

/**
 * 前端密码加密方法（逻辑完全复刻后端 PasswordUtil.getEncrypyion）
 * @param {string} password - 用户输入的明文密码
 * @returns {string} 加密后的密码（可直接传给后端存储）
 */
export function getEncrypyion(password) {
    // 2. 生成随机盐值（与后端逻辑一致：随机取 arr 中的字符）
    const index_salt = Math.floor(Math.random() * arr.length); // 随机索引（0-15）
    const salt = arr[index_salt];

    // 3. 生成随机加密次数标识（与后端逻辑一致）
    const index_count = Math.floor(Math.random() * arr.length); // 随机索引（0-15）
    const count = arr[index_count]; // 加密次数的字符形式（如 '3' 代表加密 3 次）

    // 4. 执行加密（与后端步骤完全一致）
    let encrypyionPassword = password + salt; // 密码 + 盐值
    const countNum = parseInt(count); // 将字符形式的次数转为数字（如 '3' → 3）
    for (let i = 0; i < countNum; i++) { // 循环加密指定次数
        encrypyionPassword = md5(encrypyionPassword); // 每次加密用 MD5（与后端 DigestUtil.md5Hex 一致）
    }

    // 5. 插入盐值和加密次数标识（与后端插入位置一致）
    let strb = encrypyionPassword;
    // 在第 5 位插入盐值（salt_index=5）
    strb = strb.slice(0, salt_index) + salt + strb.slice(salt_index);
    // 在第 15 位插入加密次数（count_index=15）
    strb = strb.slice(0, count_index) + count + strb.slice(count_index);

    return strb;
}